record
более подходящим для использования в случаях, когда нужно сравнивать объекты по их данным.var class1 = new MyClass { Name = "Alice" };
var class2 = new MyClass { Name = "Alice" };
Console.WriteLine(class1 == class2); // False (сравниваются ссылки)
var record1 = new MyRecord { Name = "Alice" };
var record2 = new MyRecord { Name = "Alice" };
Console.WriteLine(record1 == record2); // True (сравниваются значения)
Equals
, GetHashCode
, и операторы сравнения (если они вам нужны).Equals
, GetHashCode
, и оператор ==
. Эти методы основаны на значениях свойств, а не на ссылках.public record MyRecord(string Name, int Age);
var record = new MyRecord("Alice", 30);
var (name, age) = record; // Деконструкция
Console.WriteLine(name); // Alice
Console.WriteLine(age); // 30
Класс (class): для классов деконструкция не поддерживается по умолчанию, и для её реализации нужно явным образом добавлять метод Deconstruct
.
with
:with
, которая позволяет легко создать копию объекта с изменением некоторых его свойств. Это особенно полезно для создания новой версии объекта с минимальными изменениями в данных.var original = new MyRecord { Name = "Alice", Age = 30 };
var modified = original with { Age = 31 }; // Создает копию с изменением возраста